Previous Book Contents Book Index Next

Inside Macintosh: QuickTime /
Chapter 3 - Image Compression Manager


Summary of the Image Compression Manager

C Summary

Constants

/* determines if Image Compression Manager is available */
#define gestaltCompressionMgr 'icmp'

/* smallest data buffer you may allocate for image data spooling */
#define codecMinimumDataSize 32768

/* compressor component type */
#define compressorComponentType 'imco'
/* decompressor component type */
#define decompressorComponentType 'imdc'

/* Image Compression Manager function control flags */
#define codecFlagUseImageBuffer (1L<<0)   /* (input) use image buffer */
#define codecFlagUseScreenBuffer(1L<<1)   /* (input) use screen buffer */
#define codecFlagUpdatePrevious (1L<<2)   /* (input) update previous 
                                              buffer */
#define codecFlagNoScreenUpdate (1L<<3)   /* (input) don't update screen */
#define codecFlagWasCompressed  (1L<<4)   /* (input) image compressed */
#define codecFlagDontOffscreen  (1L<<5)   /* don't go offscreen
                                              automatically */
#define codecFlagUpdatePreviousComp (1L<<6)
                                          /* (input) update previous 
                                              buffer */
#define codecFlagForceKeyFrame (1L<<7)    /* force key frame from image */ 
#define codecFlagOnlyScreenUpdate 
                               (1L<<8)    /* decompress current frame */
#define codecFlagLiveGrab  (1L<<9)        /* sequence from live video grab */
#define codecFlagDontUseNewImageBuffer (1L<<10)
                                          /* (input) don't use new image
                                              buffer */
#define codecFlagInterlaceUpdate (1L<<11)
                                          /* (input) update screen
                                              interlacing */
/* 
   status flags from outflags parameter of DecompressSequenceFrame 
   function 
*/
#define  codecFlagUsedNewImageBuffer (1L<<14)
                                       /* (output) used new image buffer */
#define  codecFlagUsedImageBuffer (1L<<15)
                                       /* (output) used image buffer */

/* completion flags from application-defined completion functions */
#define  codecCompletionSource (1<<0) /* Image Compression Manager done 
                                        with source buffer */
#define  codecCompletionDest   (1<<1)/* Image Compression Manager done with
                                        destination buffer */

/* compression quality values */
#define codecMinQuality       0x000L /* minimum-quality image reproduction */
#define codecLowQuality       0x100L /* low-quality image reproduction */
#define codecNormalQuality    0x200L /* normal-quality image reproduction */
#define codecHighQuality      0x300L /* high-quality image reproduction */
#define codecMaxQuality       0x3FFL /* maximum-quality image reproduction */
#define codecLosslessQuality  0x400L /* lossless-quality reproduction */

/* 
   special compressor and decompressor identifiers let you choose an 
   image compressor component 
*/
#define anyCodec              (CodecComponent)0)   /* first one or a
                                                      specified type */
#define bestSpeedCodec        ((CodecComponent)-1) /* fastest of specified
                                                      type */
#define bestFidelityCodec     (CodecComponent)-2)  /* most accurate of
                                                      specified type */
#define bestCompressionCodec( (CodecComponent)-3)  /* one with smallest
                                                      resulting data */
/* 
   constants for doDither parameter of DrawTrimmedPictureFile and
   FCompressPictureFile functions 
*/
#define defaultDither0     /* respect dithering instructions in 
                               source picture */
#define forceDither1       /* dither image */
#define suppressDither2    /* don't dither image */

Data Types

typedef Component CompressorComponent; /* compressor identifier */
typedef Component DecompressorComponent;/* decompressor identifier */
typedef Component CodecComponent;      /* compressor identifier */
      
typedef long CodecType;                /* compressor type */
   
typedef unsigned short CodecFlags;     /* compressor component flags */ 
   
typedef unsigned long CodecQ;          /* compression quality */

typedef pascal OSErr (*DataProcPtr) (Ptr *dataP, long bytesNeeded, 
                      longrefCon);  /* pointer to a data-loading function */

typedef pascal OSErr (*FlushProcPtr) (Ptr data, long bytesAdded, 
                      long refCon);/* pointer to a data-unloading function */

typedef pascal void (*CompletionProcPtr)(OSErr result, short flags, 
                      long refCon);/* pointer to a completion function */
typedef pascal OSErr (*ProgressProcPtr)(short message, Fixed completeness,
                      long refCon);/* pointer to a progress function */
typedef long ImageSequence;      /* unique sequence identifier */

/* progress function structure */
struct ProgressProcRecord 
{
      ProgressProcPtr progressProc; /* pointer to your progress function */
      long progressRefCon;          /* reference constant */
};
typedef struct ProgressProcRecord ProgressProcRecord; 
typedef ProgressProcRecord *ProgressProcRecordPtr;
/* completion function structure */
struct CompletionProcRecord 
{
      CompletionProcPtr completionProc;/* pointer to completion function */
      long completionRefCon;           /* reference constant */
};
typedef struct CompletionProcRecord CompletionProcRecord;
typedef CompletionProcRecord *CompletionProcRecordPtr;

/* data-loading structure */
struct DataProcRecord 
{
      DataProcPtr dataProc;            /* pointer to data-loading function */
      long dataRefCon;                 /* reference constant */
};
typedef struct DataProcRecord DataProcRecord;
typedef DataProcRecord *DataProcRecordPtr;

/* data-unloading structure */
struct FlushProcRecord 
{
      FlushProcPtr flushProc; /* pointer to data-unloading function */
      long flushRefCon;       /* reference constant */
};
typedef struct FlushProcRecord FlushProcRecord;
typedef FlushProcRecord *FlushProcRecordPtr;
typedef pascal void (*StdPixProcPtr)(PixMap *src, Rect *srcRect,
                                     MatrixRecord *matrix, 
                                     short mode, RgnHandle mask, 
                                     PixMap *matte,Rect *matteRect, 
                                     short flags);
typedef struct 
{
   AlignmentProcPtr     alignmentProc;    /* pointer to your alignment
                                             function */
   long                 alignmentRefCon;  /* reference constant */
} AlignmentProcRecord;
typedef AlignmentProcRecord *AlignmentProcRecordPtr;
typedef struct 
{
   long     dataRate;               /* bytes per second */
   long     dataOverrun;            /* number of bytes outside rate */
   long     frameDuration;          /* in milliseconds */
   long     keyFrameRate;           /* frequency of key frames */
   CodecQ   minSpatialQuality;      /* minimum spatial quality */
   CodecQ   minTemporalQuality;     /* minimum temporal quality */
} DataRateParams;
typedef DataRateParams *DataRateParamsPtr;
/* image description structure */
struct ImageDescription 
{
      long idSize;            /* total size of this structure */
      CodecType cType;        /* compressor type of creator */
      long resvd1;            /* reserved--must be set to 0 */
      short resvd2;           /* reserved--must be set to 0 */
      short dataRefIndex;     /* reserved--must be set to 0 */
      short version;          /* version of compressed data */
      short revisionLevel;    /* version of compressor that created data */
      long vendor;            /* developer of compressor that created data */
      CodecQ temporalQuality; /* degree of temporal compression */
      CodecQ spatialQuality;  /* degree of spatial compression */
      short width;            /* width of source image in pixels */
      short height;           /* height of source image in pixels */
      Fixed hRes;             /* horizontal resolution of source image */
      Fixed vRes;             /* vertical resolution of source image */
      long dataSize;          /* size in bytes of compressed data */
      short frameCount;       /* number of frames in image data */
      Str31 name;             /* name of compression algorithm */
      short depth;            /* pixel depth of source image */
      short clutID;           /* ID number of color table for image */
};
typedef struct ImageDescription ImageDescription;
typedef ImageDescription *ImageDescriptionPtr, **ImageDescriptionHandle;

/* compressor information structure */
struct CodecInfo 
{
      Str31 typeName;            /* compression algorithm */
      short version;             /* version of compressed data */
      short revisionLevel;       /* version of component */
      long vendor;               /* developer of component */
      long decompressFlags;      /* decompression capability flags */
      long compressFlags;        /* compression capability flags */
      long formatFlags;          /* compression format flags */
      unsigned char compressionAccuracy;
                                 /* relative accuracy of compression */
      unsigned char decompressionAccuracy;
                                 /* relative accuracy of decompression */
      unsigned short compressionSpeed;
                                 /* relative speed of compressor */
      unsigned short decompressionSpeed;
                                 /* relative speed of decompressor */
      unsigned char compressionLevel;
                                 /* relative level of compression */
      char resvd;                /* reserved--set to 0 */
      short minimumHeight;       /* minimum height */
      short minimumWidth;        /* minimum width */
      short decompressPipelineLatency;
                                 /* in milliseconds (asynchronous) */
      short compressPipelineLatency;
                                 /* in milliseconds (asynchronous) */
      long privateData;          /* reserved for use by Apple */
};
typedef struct CodecInfo CodecInfo;
/* compressor name structure returned by GetCodecNameList function */
struct CodecNameSpec 
{
      CodecComponent codec;/* component ID for compressor */
      CodecType cType;     /* type identifier for compressor */
      Str31 typeName;      /* string identifier of compression algorithm */
      Handle name;         /* name of compressor component */
};
typedef struct CodecNameSpec CodecNameSpec;

/* compressor name list structure */
struct CodecNameSpecList 
{
      short count;            /* number of compressor name structures in list
                                 array that follows */
      CodecNameSpec list[1];  /* array of compressor name structures */
};
typedef struct CodecNameSpecList CodecNameSpecList;
typedef CodecNameSpecList *CodecNameSpecListPtr;
/* 
   flags from message parameter of application-defined progress functions
   tell why the Image Compression Manager called your function 
*/
enum 
{
   codecProgressOpen          = 0,  /* start of a long operation */ 
   codecProgressUpdatePercent = 1,  /* passes completion information */
   codecProgressClose         = 2   /* end of a long operation*/
};
typedef pascal void (*CompletionProcPtr) (OSErr result, short flags, 
                     long refCon);
/* data rate parameters structure */
typedef struct {
   long     dataRate;               /* bytes per second */
   long     dataOverrun;            /* number of bytes outside rate */
   long     frameDuration;          /* in milliseconds */
   long     keyFrameRate;           /* frequency of key frames */
   CodecQ   minSpatialQuality;      /* minimum spatial quality */
   CodecQ   minTemporalQuality;     /* minimum temporal quality */
} DataRateParams;
typedef DataRateParams *DataRateParamsPtr;

Image Compression Manager Functions

Getting Information About Compressor Components

pascal OSErr CodecManagerVersion
				(long *version);
pascal OSErr GetCodecNameList
				(CodecNameSpecListPtr *list, short showAll);
pascal OSErr DisposeCodecNameList
				(CodecNameSpecListPtr list);
pascal OSErr GetCodecInfo	(CodecInfo *info, CodecType cType, 
				CodecComponent codec);
pascal OSErr FindCodec		(CodecType cType, CodecComponent specCodec, 
				CompressorComponent *compressor,
				DecompressorComponent *decompressor);

Getting Information About Compressed Data

pascal OSErr GetMaxCompressionSize
				(PixMapHandle src, const Rect *srcRect, 
				short colorDepth, CodecQ quality, 
				CodecType cType, CompressorComponent codec, long *size);
pascal OSErr GetCompressionTime
				(PixMapHandle src, const Rect *srcRect, 
				short colorDepth, CodecType cType, CompressorComponent codec, 
				CodecQ *spatialQuality, 
				CodecQ *temporalQuality,
				unsigned long *compressTime);
pascal OSErr GetSimilarity	(PixMapHandle src, const Rect *srcRect, 
				ImageDescriptionHandle desc, Ptr data,
				Fixed *similarity);
pascal OSErr GetCompressedImageSize
				(ImageDescriptionHandle desc, Ptr data,
				long bufferSize, DataProcRecordPtr dataProc, long *dataSize);

Working With Images

pascal OSErr CompressImage	(PixMapHandle src, const  Rect *srcRect,
				CodecQ quality, CodecType cType,
				ImageDescriptionHandle desc, Ptr data);
pascal OSErr FCompressImage
				(PixMapHandle src, const  Rect *srcRect, 
				short colorDepth, CodecQ quality, 
				CodecType cType, CompressorComponent codec, CTabHandle clut, CodecFlags flags, 
				long bufferSize, FlushProcRecordPtr flushProc, ProgressProcRecordPtr progressProc, ImageDescriptionHandle desc, Ptr data);
pascal OSErr DecompressImage
				(Ptr data, ImageDescriptionHandle desc, PixMapHandle dst, const Rect *srcRect, 
				const  Rect *dstRect, short mode, 
				RgnHandle mask);
pascal OSErr FDecompressImage
				(Ptr data, ImageDescriptionHandle desc, PixMapHandle dst, const  Rect *srcRect, MatrixRecordPtr matrix, short mode, 
				RgnHandle mask, PixMapHandle matte, 
				const  Rect *matteRect, CodecQ accuracy, DecompressorComponent codec, long bufferSize, DataProcRecordPtr dataProc, ProgressProcRecordPtr progressProc);
pascal OSErr ConvertImage	(ImageDescriptionHandle srcDD, Ptr srcData, 
				short colorDepth, CTabHandle clut, 
				CodecQ accuracy, CodecQ quality, 
				CodecType cType, CodecComponent codec, 
				ImageDescriptionHandle dstDD, Ptr dstData);
pascal OSErr TrimImage		(ImageDescriptionHandle desc, Ptr inData, 
				long inBufferSize, DataProcRecordPtr dataProc, 
				Ptr outData, long outBufferSize, 
				FlushProcRecordPtr flushProc, Rect *trimRect, 
				ProgressProcRecordPtr progressProc);
pascal OSErr SetImageDescriptionCTable
				(ImageDescriptionHandle desc, 
				CTabHandle ctable);
pascal OSErr GetImageDescriptionCTable
				(ImageDescriptionHandle desc, 
				CTabHandle *ctable);

Working With Pictures and PICT Files

pascal OSErr CompressPicture
				(PicHandle srcPicture, PicHandle dstPicture, CodecQ quality, CodecType cType);
pascal OSErr FCompressPicture
				(PicHandle srcPicture, PicHandle dstPicture, short colorDepth, CTabHandle clut, 
				CodecQ quality, short doDither, 
				short compressAgain, 
ProgressProcRecordPtr progressProc,
				CodecType cType, CompressorComponent codec);
pascal OSErr CompressPictureFile
				(short srcRefNum, short dstRefNum, 
				CodecQ quality, CodecType cType);
pascal OSErr FCompressPictureFile
				(short srcRefNum, short dstRefNum, 
				short colorDepth, CTabHandle clut, 
				CodecQ quality, short doDither, 
				short compressAgain, 
				ProgressProcRecordPtr progressProc,
				CodecType cType, CompressorComponent codec);
pascal OSErr DrawPictureFile
				(short refNum, const Rect *frame, ProgressProcRecordPtr progressProc);
pascal OSErr DrawTrimmedPicture
				(PicHandle srcPicture, const Rect *frame, RgnHandle trimMask, short doDither, ProgressProcRecordPtr progressProc);
pascal OSErr DrawTrimmedPictureFile
				(short srcRefnum, const Rect *frame, 
				RgnHandle trimMask, short doDither, ProgressProcRecordPtr progressProc);
pascal OSErr GetPictureFileHeader
				(short refNum, Rect *frame, 
				OpenCPicParams *header);

Making Thumbnail Pictures

pascal OSErr MakeThumbnailFromPicture
				(PicHandle picture, short colorDepth, 
				PicHandle thumbnail, 
				ProgressProcRecordPtr progressProc);
pascal OSErr MakeThumbnailFromPictureFile
				(short refNum, short colorDepth, 
				PicHandle thumbnail, 
				ProgressProcRecordPtr progressProc);
pascal OSErr MakeThumbnailFromPixMap
				(PixMapHandle src, const Rect *srcRect, 
				short colorDepth, PicHandle thumbnail, ProgressProcRecordPtr progressProc);

Working With Sequences

pascal OSErr CompressSequenceBegin
				(ImageSequence *seqID, PixMapHandle src, PixMapHandle prev, const Rect *srcRect, 
				const  Rect *prevRect, short colorDepth, CodecType cType, CompressorComponent codec, CodecQ spatialQuality, CodecQ temporalQuality, long keyFrameRate, CTabHandle clut, 
				CodecFlags flags, ImageDescriptionHandle desc);
pascal OSErr CompressSequenceFrame
				(ImageSequence seqID, PixMapHandle src, 
				const Rect *srcRect, CodecFlags flags, 
Ptr data, long *dataSize, 
				unsigned char *similarity, CompletionProcRecordPtr asyncCompletionProc);
pascal OSErr DecompressSequenceBegin
				(ImageSequence *seqID, 
				ImageDescriptionHandle desc, CGrafPtr port, GDHandle gdh, const Rect *srcRect, MatrixRecordPtr matrix, short mode, 
				RgnHandle mask, CodecFlags flags, 
				CodecQ accuracy, DecompressorComponent codec);
pascal OSErr DecompressSequenceFrame
				(ImageSequence seqID, Ptr data, 
				CodecFlags inFlags, CodecFlags *outFlags, CompletionProcRecordPtr asyncCompletionProc);
pascal OSErr CDSequenceBusy
				(ImageSequence seqID);
pascal OSErr CDSequenceEnd	(ImageSequence seqID);

Changing Sequence-Compression Parameters

pascal OSErr SetCSequenceQuality
				(ImageSequence seqID, CodecQ spatialQuality, CodecQ temporalQuality);
pascal OSErr SetCSequenceKeyFrameRate
				(ImageSequence seqID, long keyframerate);
pascal OSErr GetCSequenceKeyFrameRate
				(ImageSequence seqID, long *keyframerate);
pascal OSErr SetCSequenceFrameNumber
				(ImageSequence seqID, long frameNumber);
pascal OSErr GetCSequenceFrameNumber
				(ImageSequence seqID, long *frameNumber);
pascal OSErr SetCSequencePrev
				(ImageSequence seqID, PixMapHandle prev, 
const Rect *prevRect);
pascal OSErr SetCSequenceFlushProc
				(ImageSequence seqID, 
				FlushProcRecordPtr flushProc, long bufferSize);
pascal OSErr GetCSequencePrevBuffer
				(ImageSequence seqID, GWorldPtr *gworld);

Constraining Compressed Data

pascal OSErr SetCSequenceDataRateParams
				(ImageSequence seqID, 
				DataRateParamsPtr params);
pascal OSErr GetCSequenceDataRateParams
				(ImageSequence seqID, DataRateParamsPtr params);

Changing Sequence-Decompression Parameters

pascal OSErr SetDSequenceTransferMode
				(ImageSequence seqID, short mode, 
				const RGBColor *opColor);
pascal OSErr SetDSequenceSrcRect
				(ImageSequence seqID, const Rect *srcRect);
pascal OSErr SetDSequenceMatrix
				(ImageSequence seqID, MatrixRecordPtr matrix);
pascal OSErr SetDSequenceMask
				(ImageSequence seqID, RgnHandle mask);
pascal OSErr SetDSequenceMatte
				(ImageSequence seqID, PixMapHandle matte,
				const Rect *matteRect);
pascal OSErr SetDSequenceAccuracy
				(ImageSequence seqID, CodecQ accuracy);
pascal OSErr SetDSequenceDataProc
				(ImageSequence seqID, 
				DataProcRecordPtr dataProc, long bufferSize);
pascal OSErr GetDSequenceImageBuffer
				(ImageSequence seqID, GWorldPtr *gworld);
pascal OSErr GetDSequenceScreenBuffer
				(ImageSequence seqID, GWorldPtr *gworld);

Working With the StdPix Function

pascal void StdPix		(PixMapPtr src, const  Rect *srcRect, 
				MatrixRecordPtr matrix, short mode, 
				RgnHandle mask, PixMapPtr matte, 
				Rect *matteRect, short flags);
pascal OSErr SetCompressedPixMapInfo
				(PixMapPtr pix, ImageDescriptionHandle desc, Ptr data, long bufferSize,
				DataProcRecordPtr dataProc, ProgressProcRecordPtr progressProc);
pascal OSErr GetCompressedPixMapInfo
				(PixMapPtr pix, ImageDescriptionHandle *desc, Ptr *data, long *bufferSize, 
				DataProcRecord *dataProc, 
				ProgressProcRecord *progressProc);

Aligning Windows

pascal void AlignWindow 	(WindowPtr wp, Boolean front, 
				const Rect *alignmentRect, 
				AlignmentProcRecordPtr alignmentProc);
pascal void DragAlignedWindow
				(WindowPtr wp, Point startPt, 
				Rect *boundsRect, Rect *alignmentRect, AlignmentProcRecordPtr alignmentProc);
pascal long DragAlignedGrayRgn
				(RgnHandle theRgn, Point startPt, 
				Rect *boundsRect, Rect *slopRect, short axis, ProcPtr actionProc, Rect *alignmentRect,
				AlignmentProcRecordPtr alignmentProc);
pascal void AlignScreenRect
				(Rect *rp, 
				AlignmentProcRecordPtr alignmentProc);

Working With Graphics Devices and Graphics Worlds

pascal OSErr GetBestDeviceRect
				(GDHandle *gdh, Rect *rp);
pascal QDErr NewImageGWorld
				(GWorldPtr *gworld,
				ImageDescription **idh,GWorldFlags flags);

Application-Defined Functions

Data-Loading Functions

pascal OSErr MyDataLoadingProc
				(Ptr *dataP, long bytesNeeded, long refcon);

Data-Unloading Functions

pascal OSErr MyDataUnloadingProc
				(Ptr data, long bytesAdded, long refcon);

Progress Functions

pascal  OSErr MyProgressProc
				(short message, Fixed completeness, 
				long refcon);

Completion Functions

pascal OSErr MyCompletionProc
				(OSErr result, short flag, long refcon);

Alignment Functions

pascal void MyAlignmentProc
				(Rect *rp, long refcon);

Pascal Summary

Constants

CONST
   gestaltCompressionMgr            = 'icmp';{determines if Image }
                                             { Compression Manager is }
                                             { available}

   codecMinimumDataSize             = 32768; {smallest data buffer you may }
                                             { allow for data spooling}
   compressorComponentType          = 'imco';{compressor component type}
   decompressorComponentType        = 'imdc';{decompressor component type}

   {Image Compression Manager function control flags}
   codecFlagUseImageBuffer          = $1;    {(input) use offscreen buffer}
   codecFlagUseScreenBuffer         = $2;    {(input) use screen buffer}
   codecFlagUpdatePrevious          = $4;    {(input) previous image is }
                                             { updated}
   codecFlagNoScreenUpdate          = $8;    {(input) no screen image update}
   codecFlagWasCompressed           = $10;   {(input) image has been }
                                             { compressed} 
   codecFlagDontOffscreen           = $20;   {don't use offscreen buffer}
   codecFlagUpdatePreviousComp      = $40;   {(input) previous image buffer }
                                             { updated}
   codecFlagForceKeyFrame           = $80;   {force key frame from image} 
   codecFlagOnlyScreenUpdate        = $100;  {decompresses current frame}
   codecFlagLiveGrab                = $200;  {sequence from live video grab}
   codecFlagDontUseNewImageBuffer   = $400;  {(input) return error if image }
                                             { buffer is new or reallocated}
   codecFlagInterlaceUpdate         = $800;  {(input) use interlaced update}
{status flags from outflags parameter of DecompressSequenceFrame function}
   codecFlagUsedNewImageBuffer      = $4000; {(output) used new image buffer}
   codecFlagUsedImageBuffer         = $8000; {(output) used offscreen image }
                                             { buffer}

   {completion flags from application-defined completion functions}
   codecCompletionSource            = 1;     {done with source buffer} 
   codecCompletionDest              = 2;     {done with destination buffer}

   {flags from application-defined progress functions message parameter--- }
   { tell why the Image Compression Manager called your function}
   codecProgressOpen                = 0;     {start of a long operation} 
   codecProgressUpdatePercent       = 1;     {passing completion data}
   codecProgressClose               = 2;     {end of a long}

   {compression quality values}
   codecMinQuality         = $000;  {minimum-quality image reproduction}
   codecLowQuality         = $100;  {low-quality image reproduction}
   codecNormalQuality      = $200;  {normal-quality image reproduction}
   codecHighQuality        = $300;  {high-quality image reproduction}
   codecMaxQuality         = $3FF;  {maximum-quality image reproduction}
   codecLosslessQuality    = $400;  {lossless-quality image reproduction}
   
   {special compressor and decompressor identifiers}
   anyCodec                =  0; {first component of specified type}
   bestSpeedCodec          = -1; {fastest component of specified type}
   bestFidelityCodec       = -2; {most accurate component of specified type}
   bestCompressionCodec    = -3; {component with smallest resulting data}
{constants for doDither parameter of DrawTrimmedPictureFile and }
{ FCompressPictureFile functions}
defaultDither        = 0;  {respect dithering instructions in source }
                              { picture}
   forceDither          = 1;  {dither image}
   suppressDither       = 2;  {don't dither image}

Data Types

TYPE
   CompressorComponent              = Component;{compressor identifier}
   DecompressorComponent            = Component;{decompressor identifier}
   CodecComponent                   = Component;{compressor identifier}
   
   CodecType                        = OSType;   {compressor type}
   
   CodecFlags                       = Integer;  {compressor component flags} 
   
   CodecQ                           = LongInt;  {compression quality}

   DataProcPtr             = ProcPtr;  {pointer to a data-loading function}
   FlushProcPtr            = ProcPtr;  {pointer to a data-unloading function}
   CompletionProcPtr       = ProcPtr;  {pointer to a completion function}
   ProgressProcPtr         = ProcPtr;  {pointer to a progress function}
   
   ImageSequence           = LongInt;  {unique sequence identifer}

   ProgressProcRecordPtr   = ^ProgressProcRecord;
   ProgressProcRecord =                   {progress function record}
   RECORD
      progressProc:     ProgressProcPtr;  {pointer to your progress function}
      progressRefCon:   LongInt;          {reference constant}
   END;
   
   CompletionProcRecordPtr = ^CompletionProcRecord;
   CompletionProcRecord =                 {completion function record}
   RECORD
      completionProc:   CompletionProcPtr;{pointer to completion function}
      completionRefCon: LongInt;          {reference constant}
   END;
   
   DataProcRecordPtr             = ^DataProcRecord;
   DataProcRecord =                       {data-loading function record}
   RECORD
      dataProc:   DataProcPtr;            {pointer to data-loading function}
      dataRefCon: LongInt;                {reference constant}
   END;
   
   FlushProcRecordPtr            = ^FlushProcRecord;
   FlushProcRecord =                      {data-unloading function record}
   RECORD
      flushProc:     FlushProcPtr;        {pointer to data-unloading } 
                                          { function}
      flushRefCon:   LongInt;             {reference constant}
   END;
ImageDescriptionPtr                 = ^ImageDescription;
   ImageDescriptionHandle              = ^ImageDescriptionPtr;
   ImageDescription = 
   PACKED RECORD
      idSize:           LongInt;          {total size of this record}
      cType:            CodecType;        {type of creator component}
      resvd1:           LongInt;          {reserved---must be set to 0}
      resvd2:           Integer;          {reserved---must be set to 0}
      dataRefIndex:     Integer;          {reserved---must be set to 0}
      version:          Integer;          {version of compressed data}
      revisionLevel:    Integer;          {version of creator compressor}
      vendor:           LongInt;          {developer of creator compressor}
      temporalQuality:  CodecQ;           {degree of temporal compression}
      spatialQuality:   CodecQ;           {degree of spatial compression}
      width:            Integer;    {width of source image in pixels}
      height:           Integer;    {height of source image in pixels}
      hRes:             Fixed;      {horizontal resolution of source image}
      vRes:             Fixed;      {vertical resolution of source image}
      dataSize:         LongInt;    {byte size of compressed image data}
      frameCount:       Integer;    {number of frames in image data}
      name:             PACKED ARRAY[0..31] of char;
                                    {name of compression algorithm}
      depth:            Integer;    {pixel depth of source image}
      clutID:           Integer; {ID number of the color table for image}
   END;
   
   CodecInfo =                         {compressor information record}
   PACKED RECORD
      typeName:            PACKED ARRAY[0..31] of char;
                                       {compression algorithm}
      version:             Integer;    {version of compressed data}
      revisionLevel:       Integer;    {version of component}
      vendor:              LongInt;    {developer of component}
      decompressFlags:     LongInt;    {decompression capability flags}
      compressFlags:       LongInt;    {compression capability flags}
      formatFlags:         LongInt;    {format flags}
      compressionAccuracy:
                           Char;       {relative accuracy of compression}
      decompressionAccuracy:
                           Char;       {relative accuracy of decompression}
      compressionSpeed:    Integer;    {relative compression speed}
      decompressionSpeed:  Integer;    {relative decompression speed}
      compressionLevel:    Char;       {relative compression of component}
      resvd:               Char;       {reserved---set to 0}
      minimumHeight:       Integer;    {minimum height in pixels}
      minimumWidth:        Integer;    {maximum width in pixels}
      decompressPipelineLatency:
                           Integer;    {milliseconds (asynchronous)}
      compressPipelineLatency:
                           Integer;    {milliseconds (asynchronous)}
      privateData:         LongInt;    {reserved--must be set to 0}
   END;
   
   {compressor name record returned by GetCodecNameList}
   CodecNameSpec = 
   PACKED RECORD
      codec:      CodecComponent;{component ID for compressor}
      cType:      CodecType;     {type identifier for compressor}
      typeName:   PACKED ARRAY[0..31] OF Char;
                                 {string identifier of compression algorithm}
      name:       Handle;        {name of compressor component}
   END;
{compressor name list record}
   CodecNameSpecListPtr             = ^CodecNameSpecList;
   CodecNameSpecList = 
   RECORD
      count:      Integer;             {number of compressor name records}
      list:       ARRAY[0..0] OF CodecNameSpec;
                                       {array of compressor name records}
   END;
{data rate parameters record}
   DataRateParamsPtr = ^DataRateParams;
   DataRateParams = 
   RECORD
      dataRate:            LongInt;    {bytes per second}
      dataOverrun:         LongInt;    {number of bytes outside rate}
      frameDuration:       LongInt;    {duration in milliseconds}
      keyFrameRate:        LongInt;    {frequency of key frames}
      minSpatialQuality:   CodecQ;     {minimum spatial quality}
      minTemporalQuality:  CodecQ;     {minimum temporal quality}
    END;

Image Compression Manager Routines

Getting Information About Compressor Components

FUNCTION CodecManagerVersion
				(VAR version: LongInt): OSErr;
FUNCTION GetCodecNameList 	(VAR list: CodecNameSpecListPtr; 
				showAll: Integer): OSErr;
FUNCTION DisposeCodecNameList
				(list: CodecNameSpecListPtr): OSErr;
FUNCTION GetCodecInfo 		(VAR info: CodecInfo; cType: CodecType; 
				codec: CodecComponent): OSErr;
FUNCTION FindCodec	 	(cType: CodecType; specCodec: CodecComponent; 
				VAR compressor: CompressorComponent; 
				VAR decompressor: DecompressorComponent): 
				OSErr;

Getting Information About Compressed Data

FUNCTION GetMaxCompressionSize 
				(src: PixMapHandle; srcRect: Rect; 
				colorDepth: Integer; quality: CodecQ; 
				cType: CodecType; codec: CompressorComponent; VAR size: LongInt): OSErr;
FUNCTION GetCompressionTime 
				(src: PixMapHandle; srcRect: Rect; 
				colorDepth: Integer; cType: CodecType; 
				codec: CompressorComponent; 
				VAR spatialQuality: CodecQ; 
				VAR temporalQuality: CodecQ; 
				VAR compressTime: LongInt): OSErr;
FUNCTION GetSimilarity 		(src: PixMapHandle; srcRect: Rect; 
				desc: ImageDescriptionHandle; data: Ptr; 
				VAR similarity: Fixed): OSErr;
FUNCTION GetCompressedImageSize 
				(desc: ImageDescriptionHandle; data: Ptr; bufferSize: LongInt; 
				dataProc: DataProcRecordPtr; 
				VAR dataSize: LongInt): OSErr;

Working With Images

FUNCTION CompressImage 		(src: PixMapHandle; srcRect: Rect; 
				quality: CodecQ; cType: CodecType; 
				desc: ImageDescriptionHandle; 
				data: Ptr): OSErr;
FUNCTION FCompressImage	 	src: PixMapHandle; srcRect: Rect; 
				colorDepth: Integer; quality: CodecQ; 
				cType: CodecType; codec: CompressorComponent; 
				clut: CTabHandle; flags: CodecFlags; 
				bufferSize: LongInt; 
				flushProc: FlushProcRecordPtr; 
				progressProc: ProgressProcRecordPtr; 
				desc: ImageDescriptionHandle; 
				data: Ptr): OSErr;
FUNCTION DecompressImage 	(data: Ptr; desc: ImageDescriptionHandle; 
				dst: PixMapHandle; srcRect: Rect; 
				dstRect: Rect; mode: Integer;
				mask: RgnHandle): OSErr;
FUNCTION FDecompressImage	 (data: Ptr; desc: ImageDescriptionHandle; 
				dst: PixMapHandle; srcRect: Rect; 
				matrix: MatrixRecordPtr; mode: Integer; 
				mask: RgnHandle; matte: PixMapHandle; 
				matteRect: Rect; accuracy: CodecQ; 
				codec: DecompressorComponent; 
				bufferSize: LongInt; 
				dataProc: DataProcRecordPtr; 
				progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION ConvertImage	 	(srcDD: ImageDescriptionHandle; srcData: Ptr; 
				colorDepth: Integer; clut: CTabHandle; 
				accuracy: CodecQ; quality: CodecQ; 
				cType: CodecType; codec: CodecComponent; 
				dstDD: ImageDescriptionHandle; 
				dstData: Ptr): OSErr;
FUNCTION TrimImage 		(desc: ImageDescriptionHandle; inData: Ptr; 
				inBufferSize: LongInt; 
				dataProc: DataProcRecordPtr; outData: Ptr; 
				outBufferSize: LongInt; 
				flushProc: FlushProcRecordPtr; 
				VAR trimRect: Rect; 
				progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION SetImageDescriptionCTable 
				(desc: ImageDescriptionHandle; 
				ctable: CTabHandle): OSErr;
FUNCTION GetImageDescriptionCTable 
				(desc: ImageDescriptionHandle; 
				VAR ctable: CTabHandle): OSErr;

Working With Pictures and PICT Files

FUNCTION CompressPicture 	(srcPicture: PicHandle; dstPicture: PicHandle; 
				quality: CodecQ; cType: CodecType): OSErr;
FUNCTION FCompressPicture	 (srcPicture: PicHandle; dstPicture: PicHandle; 
				colorDepth: Integer; clut: CTabHandle; 
				quality: CodecQ; doDither: Integer; 
				compressAgain: Integer; 
				progressProc: ProgressProcRecordPtr; 
				cType: CodecType; 
				codec: CompressorComponent): OSErr;
FUNCTION CompressPictureFile
				(srcRefNum: Integer; dstRefNum: Integer; quality: CodecQ; cType: CodecType): OSErr;
FUNCTION FCompressPictureFile
				(srcRefNum: Integer; dstRefNum: Integer; colorDepth: Integer; clut: CTabHandle; quality: CodecQ; doDither: Integer; compressAgain: Integer; 
				progressProc: ProgressProcRecordPtr; 
				cType: CodecType; 
				odec: CompressorComponent): OSErr;
FUNCTION DrawPictureFile 	(refNum: Integer; frame: Rect; 
				progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION DrawTrimmedPicture 
				(srcPicture: PicHandle; frame: Rect; 
				trimMask: RgnHandle; doDither: Integer; progressProc: ProgressProcPtr): OSErr;
FUNCTION DrawTrimmedPictureFile 
				(srcRefnum: Integer; frame: Rect; 
				trimMask: RgnHandle; doDither: Integer; progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION GetPictureFileHeader
				(refNum: Integer; VAR frame: Rect; 
				VAR header: OpenCPicParams): OSErr;

Making Thumbnail Pictures

FUNCTION MakeThumbnailFromPicture 
				(picture: PicHandle; colorDepth: Integer; thumbnail: PicHandle; 
				progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION MakeThumbnailFromPictureFile 
				(refNum: Integer; colorDepth: Integer; thumbnail: PicHandle; 
				progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION MakeThumbnailFromPixMap 
				(src: PixMapHandle; srcRect: Rect; 
				colorDepth: Integer; thumbnail: PicHandle; 
				progressProc: ProgressProcRecordPtr): OSErr;

Working With Sequences

FUNCTION CompressSequenceBegin 
				(VAR seqID: ImageSequence; 
				src: PixMapHandle; prev: PixMapHandle; srcRect: Rect; prevRect: Rect; 
				colorDepth: Integer; cType: CodecType; 
				codec: CompressorComponent; 
				spatialQuality: CodecQ; 
				temporalQuality: CodecQ; 
				keyFrameRate: LongInt; clut: CTabHandle; flags: CodecFlags; 
				desc: ImageDescriptionHandle): OSErr;
FUNCTION CompressSequenceFrame 
				(seqID: ImageSequence; 
				src: PixMapHandle; srcRect: Rect; 
				flags: CodecFlags; data: Ptr; 
				VAR dataSize: LongInt; VAR similarity: Char; 
				asyncCompletionProc: CompletionProcRecordPtr): OSErr;
FUNCTION DecompressSequenceBegin 
				(VAR seqID: ImageSequence; 
				desc: ImageDescriptionHandle; port: CGrafPtr; gdh: GDHandle; srcRect: Rect; 
				matrix: MatrixRecordPtr; mode: Integer; 
				mask: RgnHandle; flags: CodecFlags; 
				accuracy: CodecQ; 
				codec: DecompressorComponent): OSErr;
FUNCTION DecompressSequenceFrame 
				(seqID: ImageSequence; data: Ptr; 
				inFlags: CodecFlags; VAR outFlags: CodecFlags; asyncCompletionProc: CompletionProcRecordPtr): OSErr;
FUNCTION CDSequenceBusy 	(seqID: ImageSequence): OSErr;
FUNCTION CDSequenceEnd 	(seqID: ImageSequence): OSErr;

Changing Sequence-Compression Parameters

FUNCTION SetCSequenceQuality 
				(seqID: ImageSequence; spatialQuality: CodecQ; temporalQuality: CodecQ): OSErr;
FUNCTION SetCSequenceKeyFrameRate 
				(seqID: ImageSequence; 
				keyframerate: LongInt): OSErr;
FUNCTION GetCSequenceKeyFrameRate
				(seqID: ImageSequence; 
				VAR keyframerate: LongInt): OSErr;
FUNCTION GetCSequenceKeyFrameRate
				(seqID: ImageSequence; 
				VAR keyframerate: LongInt): OSErr;
FUNCTION SetCSequenceFrameNumber
				(seqID: ImageSequence; 
				frameNumber: LongInt): OSErr;
FUNCTION GetCSequenceFrameNumber
				(seqID: ImageSequence; 
				VAR frameNumber: LongInt): OSErr;
FUNCTION SetCSequencePrev 	(seqID: ImageSequence; prev: PixMapHandle; 
				prevRect: Rect): OSErr;
FUNCTION SetCSequenceFlushProc 
				(seqID: ImageSequence; 
				flushProc: FlushProcRecordPtr; 
				bufferSize: LongInt): OSErr;
FUNCTION GetCSequencePrevBuffer 
				(seqID: ImageSequence; 
				VAR gworld: GWorldPtr): OSErr;

Constraining Compressed Data

FUNCTION SetCSequenceDataRateParams
				(seqID: ImageSequence; 
				params: DataRateParamsPtr): OSErr;
FUNCTION GetCSequenceDataRateParams
				(seqID: ImageSequence; 
				params: DataRateParamsPtr): OSErr;

Changing Sequence-Decompression Parameters

FUNCTION SetDSequenceTransferMode 
				(seqID: ImageSequence; mode: Integer; 
				opColor: RGBColor): OSErr;
FUNCTION SetDSequenceSrcRect
				(seqID: ImageSequence; srcRect: Rect): OSErr;
FUNCTION SetDSequenceMatrix
				(seqID: ImageSequence; 
				matrix: MatrixRecordPtr): OSErr;
FUNCTION SetDSequenceMask 	(seqID: ImageSequence; mask: RgnHandle): OSErr;
FUNCTION SetDSequenceMatte 	(seqID: ImageSequence; matte: PixMapHandle; 
				matteRect: Rect): OSErr;
FUNCTION SetDSequenceAccuracy 
				(seqID: ImageSequence; 
				accuracy: CodecQ): OSErr;
FUNCTION SetDSequenceDataProc 
				(seqID: ImageSequence; 
				dataProc: DataProcRecordPtr; 
				bufferSize: LongInt): OSErr;
FUNCTION GetDSequenceImageBuffer 
				(seqID: ImageSequence; 
				VAR gworld: GWorldPtr): OSErr;
FUNCTION GetDSequenceScreenBuffer 
				(seqID: ImageSequence; 
				VAR gworld: GWorldPtr): OSErr;

Working With the StdPix Routine

FUNCTION StdPix			 (src: PixMapPtr; srcRect: Rect; 
				matrix: MatrixRecordPtr; mode: Integer; 
				mask: RgnHandle; matte: PixMapPtr; 
				matteRect: Rect; flags: Integer): OSErr
FUNCTION SetCompressedPixMapInfo 
				(pix: PixMapPtr; desc: ImageDescriptionHandle; data: Ptr; bufferSize: LongInt; 
				dataProc: DataProcRecordPtr; 
				progressProc: ProgressProcRecordPtr): OSErr;
FUNCTION GetCompressedPixMapInfo 
				(pix: PixMapPtr; 
				VAR desc: ImageDescriptionHandle; 
				VAR data: Ptr; VAR bufferSize: LongInt; 
				VAR dataProc: DataProcRecord; 
				VAR progressProc: ProgressProcRecord): OSErr;

Aligning Windows

PROCEDURE AlignWindow		(wp: WindowPtr; front: Boolean; 
				alignmentRect: RectPtr; 
				alignmentProc:AlignmentProcRecordPtr );
PROCEDURE DragAlignedWindow
				(wp: WindowPtr; startPt: Point; 
				VAR boundsRect: Rect; VAR alignmentRect: Rect; alignmentProc:AlignmentProcRecordPtr);
FUNCTION DragAlignedGrayRgn
				(theRgn: RgnHandle; startPt: Point; 
				VAR boundsRect: Rect; VAR slopRect: Rect; axis: Integer; actionProc: ProcPtr; 
				VAR alignmentRect: Rect; alignmentProc:AlignmentProcRecordPtr): LongInt;
PROCEDURE AlignScreenRect	(VAR rp: Rect; 
				alignmentProc:AlignmentProcRecordPtr);

Working With Graphics Devices and Graphics Worlds

FUNCTION GetBestDeviceRect	(VAR gdh: GDHandle; VAR rp: Rect): OSErr;
FUNCTION NewImageGWorld		(VAR gworld: GWorldPtr; 
				idh: ImageDescriptionHandle; 
				flags :GWorldFlags): OSErr;

Application-Defined Routines

Data-Loading Functions

FUNCTION MyDataLoadingProc 	(VAR dataP: Ptr; bytesNeeded: LongInt; 
				refcon: LongInt): OSErr;

Data-Unloading Functions

FUNCTION MyDataUnloadingProc
				(data: Ptr; bytesAdded: LongInt; 
				refcon: LongInt): OSErr;

Progress Functions

FUNCTION MyProgressProc		 (message: Integer; completeness: Fixed; 
				refcon: LongInt): OSErr;

Completion Functions

FUNCTION MyCompletionProc 	(result: OSErr; flag: Integer; 
				refcon: LongInt): OSErr;

Alignment Routines

PROCEDURE MyAlignmentProc	(rp: RectPtr, refcon: LongInt);

Result Codes

paramErr-50Invalid parameter specified
memFullErr-108Not enough memory available
codecErr-8960General error condition
noCodecErr-8961Image Compression Manager could not find the specified compressor
codecUnimpErr-8962Feature not implemented by this compressor
codecSizeErr-8963Invalid buffer size specified
codecScreenBufErr-8964Could not allocate the screen buffer
codecImageBufErr-8965Could not allocate the image buffer
codecSpoolErr-8966Error loading or unloading data
codecAbortErr-8967Operation aborted by the progress function
codecWouldOffScreenErr-8968Compressor would use screen buffer if it could
codecBadDataErr-8969Compressed data contains inconsistencies
codecDataVersErr-8970Compressor does not support the compression version used to compress the image
codecExtensionNotFoundErr-8971Requested extension is not in the image description
codecConditionErr-8972Component cannot perform requested operation
codecOpenErr-8973Could not open the compressor or decompressor


Previous Book Contents Book Index Next

© Apple Computer, Inc.
6 JUL 1996